package gui;

import java.io.IOException;

import javax.swing.JOptionPane;
import javax.swing.SwingWorker;

import KNN.IMetryka;

import rozpoznawanieCyfr.RozpoznawanieCyfr;

public class ObslugaRozpoznawania extends SwingWorker<Void, Void>{

	private boolean czyWlaczycWypisywanieNaKonsole = false;
	private RozpoznawanieCyfr rozpoznawanieCyfr;
	private FrameMain frameMain;

	public ObslugaRozpoznawania() {
		rozpoznawanieCyfr = new RozpoznawanieCyfr();
		if (czyWlaczycWypisywanieNaKonsole) {
			rozpoznawanieCyfr.podlaczConsoleAppender();
		}
	}
	
	public void setFrameMain(FrameMain frame){
		frameMain = frame;
	}
	
	public void start(){
		frameMain.zablokujKontrolki();
		ustawCechy();
		if(frameMain.getCheckGenerowanieWektorow().isSelected()){
			try {
				rozpoznawanieCyfr.wygenerujWektory(frameMain.getLogger());
			} catch (IOException e) {
				wyswietlBlad(e);
				e.printStackTrace();
			}
		}
		if(frameMain.getCheckKlasyfikacjaWektorow().isSelected()){
			try {
				rozpoznawanieCyfr.rozpoznawaj((IMetryka)frameMain.getComboBoxMetryka().getSelectedItem(),frameMain.getLogger(), frameMain.getCheckNormalizacja().isSelected());
			} catch (Exception e) {
				wyswietlBlad(e);
				e.printStackTrace();
			}
		}
		frameMain.zakonczPrace();
	}
	
	private void ustawCechy(){
		rozpoznawanieCyfr.setCiezkoscSrodka(frameMain.getCheckCiezkoscSrodka().isSelected());
		rozpoznawanieCyfr.setGornaStrefa(frameMain.getCheckSzerokoscGory().isSelected());
		rozpoznawanieCyfr.setKrzyweZamkniete(frameMain.getCheckKrzyweZamkniete().isSelected());
		rozpoznawanieCyfr.setLiczbaSasiadow(Integer.parseInt(frameMain.getTextLiczbaSasiadow().getText()));
		rozpoznawanieCyfr.setLuki(frameMain.getCheckLuki().isSelected());
	}
	
	private void wyswietlBlad(Object komunikat){
		JOptionPane.showMessageDialog(frameMain, komunikat, "Błąd", JOptionPane.ERROR_MESSAGE);
	}

	@Override
	protected Void doInBackground() throws Exception {
		start();
		return null;
	}
	
	

}
